import configService from './config.service.js'
let apiUrl = configService.apiUrl;
// 此vm参数为页面的实例，可以通过它引用vuex中的变量
module.exports = (vm) => {
	// 初始化请求配置
	uni.$u.http.setConfig((config) => {
		/* config 为默认全局配置*/
		config.baseURL = apiUrl; /* 根域名 */
		config.header = {
		  ...config.header
		}
		return config
	})


	// 请求拦截
	uni.$u.http.interceptors.request.use((config) => { // 可使用async await 做异步操作
		if(vm.$store.state.requestTip){
			uni.showLoading({
				title: '加载中'
			});
		}
		config.header = {
		  ...config.header,
		   'Authorization':vm.$store.state.vuex_token,
		   // 'SYSINFO_LOGINPCID':1,
		   'sysinfo_loginpctype':2,  //代表网格的
		   'sysinfo_loginpcid':vm.$store.state.vuex_pcId //获取社区pcid
		}
		return config
	}, config => { // 可使用async await 做异步操作
		return Promise.reject(config)
	})

	// 响应拦截
	uni.$u.http.interceptors.response.use((response) => {
		/* 对响应成功做点什么 可使用async await 做异步操作*/
		const data = response.data
		// 自定义参数 对不同状态的判断提示
		//const custom = response.config?.custom
		// if (data.code !== 200) { 
		// 	// 如果没有显式定义custom的toast参数为false的话，默认对报错进行toast弹出提示
		// 	if (custom.toast !== false) {
		// 		uni.$u.toast(data.message)
		// 	}
		// 	// 如果需要catch返回，则进行reject
		// 	if (custom?.catch) {
		// 		return Promise.reject(data)
		// 	} else {
		// 		// 否则返回一个pending中的promise，请求不会进入catch中
		// 		return new Promise(() => { })
		// 	}
		// }
		uni.hideLoading();
		return data
	}, (response) => {
		// 对响应错误做点什么 （statusCode !== 200）
		let data = response.data
		let dataStatus = response.statusCode
		let message = data?data.message?data.message:'':''
		switch (dataStatus) {
			case 400:
				uni.$u.toast(message?message==='Bad credentials'?'用户名或密码错误':message:"用户不存在,请联系管理员");
				break;
			case 401:
				uni.$u.toast("token失效请重新登录");
				setTimeout(()=>{
					uni.hideLoading();
					uni.$u.vuex('vuex_token', '')
					uni.clearStorage();
					uni.WebIM.conn.close(); //聊天退出
					uni.$u.route({url:'pages/login/login'});
				},1000)
				break;
			default:
				uni.$u.toast('请求失败请检查网络！')
		}
		return Promise.reject(response)
	})
}

